home *** CD-ROM | disk | FTP | other *** search
- INTRODUCCION AL ASM: ARQUITECTURA
- =================================
-
- En el interior de un ordenador, el microprocesador (abreviadamente uP) es
- un chip más interconectado a los chips de memoria, etc... La diferencia es que
- es un chip que, además de ser capaz de responder a las señales que le llegan
- del exterior, es capaz de generar señales para otros chips y recoger la
- respuesta de éstos.
-
- Supondremos en principio que tenemos un ordenador con un uP y un único
- chip de memoria. Supondremos que el chip de memoria es de 64 kilobytes.
- La memoria es igual que una serie de celdillas, en la que cada celdilla puede
- contener un número entre 0 y 255d (0 y 0FFh), es decir, que está compuesta
- de ocho bits. Las celdillas se numeran comenzando en la 0 y acabando en la
- 65535d (o 0FFFFh), y a este número o índice se le denomina 'dirección' de la
- posición de memoria o celdilla. Por tanto, con un número entre 0 y 65535d se
- identifica una posición de memoria en concreto. Una memoria soporta dos
- operaciones distintas: LECTURA y ESCRITURA. Veremos cómo se realizan estas
- dos operaciones a nivel de circuito.
-
- De los pines o patillas del chip de memoria, los que más nos interesan son
- los siguientes: CE o Chip Enable, RD/WR o Read/Write, las 16 patillas A0-A15,
- y las ocho D0-D7. Estas patillas pueden estar a dos niveles, 0V o +5V. Para las
- patillas de control se adopta una convención: si se dice que una patilla está
- 'activa a nivel alto' indica que cuando se quiere activar la función de una
- patilla hay que ponerla a +5; y cuando se dice que es 'activa a nivel bajo'
- indica que hay que ponerla a 0, y el nombre de la patilla se suele escribir
- con una rayita por encima. Aquí, tomaremos la convención (para simplificar),
- de que todas las patillas son activas a nivel alto. La patilla RD/WR indica
- si la operación es lectura o escritura, y asumiremos que a nivel alto significa
- lectura.
-
- Cuando el circuito externo a la memoria quiere leer el dato de una deter-
- minada posición de memoria, tiene que hacer varias cosas:
-
- -Poner CE a nivel alto (activa el chip)
- -Poner RD/WR a nivel alto (indica lectura)
- -Poner en las lineas A0-A15 el número en binario de la dirección de mem.
- de la que se quiere leer el dato. Para saber la señal que hay que
- meter a partir de la dirección, tomamos un ejemplo:
-
- Posición 23345d (decimal) -> 5B31h (hex.)->
- 0101101100110001b (binario)
- Los bits o dígitos de un número se numeran empezando por la derecha con
- el 0, 1,... hasta el 15 que es el de la izquierda en este caso.
- Por tanto, para leer de esta posición la línea A0 debería estar a 5V
- (representa un 1), las A1,A2 y A3 a 0v (representa un 0),...
- -Esperar algunos ciclos de reloj (depende de la velocidad del chip) y
- recoger el dato de las líneas D0-D7, que son los 8 dígitos binarios o
- bits del número almacenado.
-
- Cuando el circuito externo lo que quiere es escribir, debe hacer lo mismo
- excepto que deberá poner RD/WR a nivel bajo y en lugar de leer el dato de D0-D7
- deberá poner él mismo los bits del dato a escribir, a menudo algunos ciclos
- después de poner CE activo y RD/WR a nivel bajo para dar tiempo al chip a
- reaccionar.
-
- El propio uP tiene las líneas A0-A15 entre sus pines, que van conectadas a
- las A0-A15 de la memoria, y tiene también D0-D7 conectadas a las de la memoria.
- También tiene una patilla RD/WR, que pone al valor correspondiente cuando
- quiere acceder a la memoria. Y también tiene una patilla, que en el Z80 (el uP
- que llevaban los Spectrum, los Amstrad CPC y los MSX) se llama MREQ (Memory
- Request), que pone a nivel alto cuando quiere acceder a memoria (lectura o
- escritura). Esta patilla, como habréis imaginado, va conectada al CE de la
- memoria. A las líneas que interconectan el uP con otros dispositivos se les
- denomina genéricamente 'bus', clasificándose en tres grupos funcionales: el
- 'bus de direcciones', formado por las líneas A0-A15, el 'bus de datos', formado
- por las D0-D7, y el 'bus de control' que incluye todas las demás líneas. El
- número de líneas para el bus de direcciones se denomina 'anchura del bus de
- direcciones', y análogamente para el bus de datos. El modelo idealizado que
- hemos visto tendría una anchura del bus de direcciones de 16 bits, y una
- anchura del bus de datos de 8 bits. Este modelo es muy similar a la
- arquitectura real de un Spectrum, por ejemplo.
-
- Un uP determinado se diseña de manera que pueda reconocer ciertos números
- como instrucciones que le indican hacer algo determinado. Estas instrucciones
- que el uP es capaz de reconocer forman el 'conjunto de instrucciones' del uP,
- y los números que le corresponden a cada una son los 'codigos de operación' de
- las instrucciones. Algunas instrucciones sencillas son sólo un byte, otras
- están formadas por 2 o más bytes. Una ristra de estas instrucciones del uP
- forman un programa, y a este 'lenguaje', formado únicamente por números y que
- entiende el uP directamente, se le llama código máquina. Al principio, los
- ordenadores se programaban introduciendo directamente los códigos de operación
- en la memoria, pero evidentemente además de tedioso resultaba de lo más
- proclive a errores. Además, revisar un listado de números presenta una gran
- dificultad para el programador. Por tanto, se define para cada uno de las
- instrucciones del uP una palabra representativa de su función, a la que se
- llama 'mnemónico', a la que eventualmente habrá que añadir los operandos para
- poder generar el código de operación ('opcode') completo, ya que el código de
- operación lleva información tanto de la instrucción a ejecutar como de los
- operandos que ésta manejará. El programa que traduce un texto con instruc-
- ciones en este nuevo lenguaje se denomina 'assembler' o 'ensamblador', y este
- lenguaje de programación se denomina 'assembly language' o 'lenguaje ensam-
- blador'. Algunos ensambladores conocidos para la familia 80x86 son el MASM o
- Macro ASseMbler de Microsoft y el TASM o Turbo ASseMbler de Borland. El
- programa DEBUG que viene con el MS-DOS o el SID que viene con el DR-DOS también
- son capaces de traducir instrucciones ASM en sus correspondientes códigos de
- operación, pero a un nivel mucho más primitivo que el MASM o el TASM.
-
- Ahora que ya sabemos cómo el uP puede acceder a la memoria, y cómo son los
- programas que ejecuta éste veamos cuál es la tarea del micro y que es lo que
- hace constantemente.
-
- Para que el uP ejecute un programa, se deben situar los códigos de operación
- del programa a partir de una dirección determinada. A esta dirección a partir
- de la que está el programa la denominamos 'dirección de comienzo' por razones
- evidentes. El uP internamente tiene algo de memoria, muy poca, estructurada
- en lo que se denomina 'registros'. Cada registro está formado por una serie de
- bits, 16 para ser precisos en el 8086, de forma que puede contener un número
- entero en un rango determinado (con 16 bits podremos almacenar números entre 0
- y 65535d o 0FFFFh). Los registros dependen de cada uP en concreto, pero veremos
- dos que existen en todo uP: el llamado 'Instruction Pointer' o 'IP' en el 8086,
- y el registro de instrucción. Para comprender el funcionamiento de ambos,
- veremos un modelo idealizado de un ordenador con un uP, un chip de memoria de
- 64K, un bus de direcciones de 16 bits, uno de datos de 8 bits y un conjunto de
- instrucciones en el que todas tienen un código de operación de un sólo byte.
-
- El uP tiene una patilla llamada CK habitualmente ('clock' o reloj), por el
- que recibe una señal cuadrada producida por un cristal de cuarzo y algo más de
- circuitería (señal cuadrada es una señal que periódica y alternativamente toma
- dos valores, en el caso de los PCs 0V y +5V. La velocidad de un ordenador en
- megahercios o megaciclos por segundo no es más que la frecuencia de la señal
- de reloj). El uP realiza varias tareas, al ritmo del reloj que se le conecta.
- Estas tareas requieren uno o varios ciclos de reloj, pero son siempre las
- mismas y se repiten constantemente:
-
- -Primero, el uP genera una lectura de memoria para leer el byte
- contenido en la dirección de memoria indicada por IP. El valor
- recibido se almacena en el registro de instrucción. Es decir, se
- activan MREQ y RD/WR se pone a RD, poniendo el valor contenido en
- IP en las líneas A0-A15. El valor que se lee de D0-D7 se introduce
- en el registro de instrucción.
- -El uP incrementa el registro IP en uno, para luego leer la siguiente
- instrucción de la serie.
- -El uP decodifica la instrucción del registro de instr., es decir, ve
- qué significa, y la ejecuta. Esta ejecución puede implicar más accesos
- a memoria para lectura/escritura, puede cambiar el IP directamente
- para saltar a otra dirección (a modo del GOTO del basic), etc...
- -Vuelve al primer paso, es decir, lee la siguiente instrucción.
-
- Y así, el uP ejecuta su trabajo 'ad infinitum'. Esta secuencia se repite
- incansablemente, a no ser que el micro reciba una señal que lo interrumpa, un
- reset, o algún otro suceso poco habitual (las interrupciones son relativamente
- poco habituales).
-
- Antes de ver el funcionamiento del 8086 en concreto, que es el uP que la
- arquitectura IBM PC define como estándar mínimo, revisaremos cómo se comunica
- el uP con los periféricos, ya que hasta ahora sólo hemos visto la comunicación
- con la memoria.
-
- En un ordenador, además de la memoria existen otros dispositivos que
- requieren que el uP interactúe con ellos. Estos dispositivos pueden ser el
- módem, la tarjeta gráfica, el teclado,... entre muchos otros. Estos dispositi-
- vos se comunican con el micro enviándole datos y recibiendo datos de éste.
- Algunos son sólo de lectura (el uP sólo puede recibir datos de ellos), otros
- sólo de escritura (el uP puede enviarles datos, pero ellos no envían nada a
- éste), y muchos otros son tanto de lectura como de escritura.
-
- Una de las maneras posibles sería hacer que el uP tuviese una patilla para
- cada dispositivo, al igual que la MREQ, de forma que cuando quisiera acceder
- a uno en concreto pusiese su patilla correspondiente a nivel activo y escri-
- biese o leyese el dato de o en el bus de datos. Pero ya que los dispositivos
- son muchos y los uP se diseñan de forma general para distintos circuitos, lo
- que se hace es asignar a cada dispositivo un número o dirección, de forma
- parecida a la que cada dirección de memoria identifica una celdilla, y poner
- una patilla en el uP (llamada IORQ - Input Output ReQuest - en el Z80, en el
- 8086 tendrá un nombre parecido) que se pone a nivel activo cuando se quiere
- acceder a cualquier dispositivo. Cada periférico (llamando periférico a todo
- lo que no sea la memoria o el uP) debe responder sólo cuando IORQ esté activa
- y lea en el bus de direcciones el número que le corresponde. Cada uno de estos
- valores que se sitúan en el bus de direcciones se llama 'puerto de entrada/
- salida'. Los puertos que le corresponden a cada dispositivo es una de las
- cosas que identifican un estándar, en nuestro caso el estándar PC. Algunos
- dispositivos, como la tarjeta gráfica, necesitan intercambiar muchos datos con
- el uP y por tanto requieren varios puertos. Por cierto, cada tarjeta gráfica
- tiene sus puertos estándar, por ejemplo los puertos de una Hércules monocromo
- no coinciden en absoluto con los de una VGA color, y por tanto se pueden
- montar ambas en el mismo ordenador.
-
- En el siguiente capítulo saldremos de este ordenador idealizado para entrar
- de lleno en la arquitectura segmentada de los compatibles PC, y veremos los
- registros del 8086.
-
- Salut!!!